#include <iostream>
#include <any>
#include <exception>
#include <vector>

class Test
{

};

template<typename T>
T TypeCast(const std::any &a)
{
    try
    {
        T b = std::any_cast<T>(a);
        return b;
    }
    catch(std::exception& e)
    {
        std::cout << e.what() << std::endl;
        return T();
    }
    
}

int main()
{
    // any：万用类型，什么都可以放
    // std::any a;
    // a = 3.14;
    // a = "helloworld";
    // a = Test();

    // std::any a = 1;
    // int b = std::any_cast<int>(a);
    // std::cout << b << std::endl;

    // std::any a = 1;
    // int b = TypeCast<double>(a);
    // std::cout << b << std::endl;

    std::any a = 1;
    int b = TypeCast<double>(a);

    std::vector<std::any> v;
    v.push_back(1);
    v.push_back(3.14);
    v.push_back("helloworld");
    v.push_back(Test());

    return 0;
}